home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / interp / perl5.005.tar.gz / perl5.005.tar / perl5.005 / iperlsys.h < prev    next >
C/C++ Source or Header  |  1998-07-22  |  34KB  |  931 lines

  1. /*
  2.  * iperlsys.h - Perl's interface to the system
  3.  *
  4.  * This file defines the system level functionality that perl needs.
  5.  *
  6.  * When using C, this definition is in the form of a set of macros
  7.  * that can be #defined to the system-level function (or a wrapper
  8.  * provided elsewhere).
  9.  *
  10.  * When using C++ with -DPERL_OBJECT, this definition is in the
  11.  * form of a set of virtual base classes which must be subclassed to
  12.  * provide a real implementation.  The Perl Object will use instances
  13.  * of this implementation to use the system-level functionality.
  14.  *
  15.  * GSAR 21-JUN-98
  16.  */
  17.  
  18. #ifndef __Inc__IPerl___
  19. #define __Inc__IPerl___
  20.  
  21. /*
  22.  *    PerlXXX_YYY explained - DickH and DougL @ ActiveState.com
  23.  *
  24.  * XXX := functional group
  25.  * YYY := stdlib/OS function name
  26.  *
  27.  * Continuing with the theme of PerlIO, all OS functionality was
  28.  * encapsulated into one of several interfaces.
  29.  *
  30.  * PerlIO - stdio
  31.  * PerlLIO - low level I/O
  32.  * PerlMem - malloc, realloc, free
  33.  * PerlDir - directory related
  34.  * PerlEnv - process environment handling
  35.  * PerlProc - process control
  36.  * PerlSock - socket functions
  37.  *
  38.  *
  39.  * The features of this are:
  40.  * 1. All OS dependant code is in the Perl Host and not the Perl Core.
  41.  *    (At least this is the holy grail goal of this work)
  42.  * 2. The Perl Host (see perl.h for description) can provide a new and
  43.  *    improved interface to OS functionality if required.
  44.  * 3. Developers can easily hook into the OS calls for instrumentation
  45.  *    or diagnostic purposes.
  46.  *
  47.  * What was changed to do this:
  48.  * 1. All calls to OS functions were replaced with PerlXXX_YYY
  49.  *
  50.  */
  51.  
  52.  
  53. /*
  54.     Interface for perl stdio functions
  55. */
  56.  
  57.  
  58. /* Clean up (or at least document) the various possible #defines.
  59.    This section attempts to match the 5.003_03 Configure variables
  60.    onto the 5.003_02 header file values.
  61.    I can't figure out where USE_STDIO was supposed to be set.
  62.    --AD
  63. */
  64. #ifndef USE_PERLIO
  65. # define PERLIO_IS_STDIO
  66. #endif
  67.  
  68. /* Below is the 5.003_02 stuff. */
  69. #ifdef USE_STDIO
  70. #  ifndef PERLIO_IS_STDIO
  71. #      define PERLIO_IS_STDIO
  72. #  endif
  73. #else
  74. extern void PerlIO_init _((void));
  75. #endif
  76.  
  77. #ifdef PERL_OBJECT
  78.  
  79. #ifndef PerlIO
  80. typedef struct _PerlIO PerlIO;
  81. #endif
  82.  
  83. class IPerlStdIO
  84. {
  85. public:
  86.     virtual PerlIO *    Stdin(void) = 0;
  87.     virtual PerlIO *    Stdout(void) = 0;
  88.     virtual PerlIO *    Stderr(void) = 0;
  89.     virtual PerlIO *    Open(const char *, const char *, int &err) = 0;
  90.     virtual int        Close(PerlIO*, int &err) = 0;
  91.     virtual int        Eof(PerlIO*, int &err) = 0;
  92.     virtual int        Error(PerlIO*, int &err) = 0;
  93.     virtual void    Clearerr(PerlIO*, int &err) = 0;
  94.     virtual int        Getc(PerlIO*, int &err) = 0;
  95.     virtual char *    GetBase(PerlIO *, int &err) = 0;
  96.     virtual int        GetBufsiz(PerlIO *, int &err) = 0;
  97.     virtual int        GetCnt(PerlIO *, int &err) = 0;
  98.     virtual char *    GetPtr(PerlIO *, int &err) = 0;
  99.     virtual char *    Gets(PerlIO*, char*, int, int& err) = 0;
  100.     virtual int        Putc(PerlIO*, int, int &err) = 0;
  101.     virtual int        Puts(PerlIO*, const char *, int &err) = 0;
  102.     virtual int        Flush(PerlIO*, int &err) = 0;
  103.     virtual int        Ungetc(PerlIO*,int, int &err) = 0;
  104.     virtual int        Fileno(PerlIO*, int &err) = 0;
  105.     virtual PerlIO *    Fdopen(int, const char *, int &err) = 0;
  106.     virtual PerlIO *    Reopen(const char*, const char*, PerlIO*, int &err) = 0;
  107.     virtual SSize_t    Read(PerlIO*,void *,Size_t, int &err) = 0;
  108.     virtual SSize_t    Write(PerlIO*,const void *,Size_t, int &err) = 0;
  109.     virtual void    SetBuf(PerlIO *, char*, int &err) = 0;
  110.     virtual int        SetVBuf(PerlIO *, char*, int, Size_t, int &err) = 0;
  111.     virtual void    SetCnt(PerlIO *, int, int &err) = 0;
  112.     virtual void    SetPtrCnt(PerlIO *, char *, int, int& err) = 0;
  113.     virtual void    Setlinebuf(PerlIO*, int &err) = 0;
  114.     virtual int        Printf(PerlIO*, int &err, const char *,...) = 0;
  115.     virtual int        Vprintf(PerlIO*, int &err, const char *, va_list) = 0;
  116.     virtual long    Tell(PerlIO*, int &err) = 0;
  117.     virtual int        Seek(PerlIO*, off_t, int, int &err) = 0;
  118.     virtual void    Rewind(PerlIO*, int &err) = 0;
  119.     virtual PerlIO *    Tmpfile(int &err) = 0;
  120.     virtual int        Getpos(PerlIO*, Fpos_t *, int &err) = 0;
  121.     virtual int        Setpos(PerlIO*, const Fpos_t *, int &err) = 0;
  122.     virtual void    Init(int &err) = 0;
  123.     virtual void    InitOSExtras(void* p) = 0;
  124. #ifdef WIN32
  125.     virtual int        OpenOSfhandle(long osfhandle, int flags) = 0;
  126.     virtual int        GetOSfhandle(int filenum) = 0;
  127. #endif
  128. };
  129.  
  130.  
  131.  
  132. #ifdef USE_STDIO_PTR
  133. #  define PerlIO_has_cntptr(f)        1       
  134. #  ifdef STDIO_CNT_LVALUE
  135. #    define PerlIO_canset_cnt(f)    1      
  136. #    ifdef STDIO_PTR_LVALUE
  137. #      define PerlIO_fast_gets(f)    1        
  138. #    endif
  139. #  else
  140. #    define PerlIO_canset_cnt(f)    0      
  141. #  endif
  142. #else  /* USE_STDIO_PTR */
  143. #  define PerlIO_has_cntptr(f)        0
  144. #  define PerlIO_canset_cnt(f)        0
  145. #endif /* USE_STDIO_PTR */
  146.  
  147. #ifndef PerlIO_fast_gets
  148. #define PerlIO_fast_gets(f)        0        
  149. #endif
  150.  
  151. #ifdef FILE_base
  152. #define PerlIO_has_base(f)        1
  153. #else
  154. #define PerlIO_has_base(f)        0
  155. #endif
  156.  
  157. #define PerlIO_stdin()        PL_piStdIO->Stdin()
  158. #define PerlIO_stdout()        PL_piStdIO->Stdout()
  159. #define PerlIO_stderr()        PL_piStdIO->Stderr()
  160. #define PerlIO_open(x,y)    PL_piStdIO->Open((x),(y), ErrorNo())
  161. #define PerlIO_close(f)        PL_piStdIO->Close((f), ErrorNo())
  162. #define PerlIO_eof(f)        PL_piStdIO->Eof((f), ErrorNo())
  163. #define PerlIO_error(f)        PL_piStdIO->Error((f), ErrorNo())
  164. #define PerlIO_clearerr(f)    PL_piStdIO->Clearerr((f), ErrorNo())
  165. #define PerlIO_getc(f)        PL_piStdIO->Getc((f), ErrorNo())
  166. #define PerlIO_get_base(f)    PL_piStdIO->GetBase((f), ErrorNo())
  167. #define PerlIO_get_bufsiz(f)    PL_piStdIO->GetBufsiz((f), ErrorNo())
  168. #define PerlIO_get_cnt(f)    PL_piStdIO->GetCnt((f), ErrorNo())
  169. #define PerlIO_get_ptr(f)    PL_piStdIO->GetPtr((f), ErrorNo())
  170. #define PerlIO_putc(f,c)    PL_piStdIO->Putc((f),(c), ErrorNo())
  171. #define PerlIO_puts(f,s)    PL_piStdIO->Puts((f),(s), ErrorNo())
  172. #define PerlIO_flush(f)        PL_piStdIO->Flush((f), ErrorNo())
  173. #define PerlIO_gets(s, n, fp)   PL_piStdIO->Gets((fp), s, n, ErrorNo())
  174. #define PerlIO_ungetc(f,c)    PL_piStdIO->Ungetc((f),(c), ErrorNo())
  175. #define PerlIO_fileno(f)    PL_piStdIO->Fileno((f), ErrorNo())
  176. #define PerlIO_fdopen(f, s)    PL_piStdIO->Fdopen((f),(s), ErrorNo())
  177. #define PerlIO_reopen(p, m, f)  PL_piStdIO->Reopen((p), (m), (f), ErrorNo())
  178. #define PerlIO_read(f,buf,count)                    \
  179.     (SSize_t)PL_piStdIO->Read((f), (buf), (count), ErrorNo())
  180. #define PerlIO_write(f,buf,count)                    \
  181.     PL_piStdIO->Write((f), (buf), (count), ErrorNo())
  182. #define PerlIO_setbuf(f,b)    PL_piStdIO->SetBuf((f), (b), ErrorNo())
  183. #define PerlIO_setvbuf(f,b,t,s)    PL_piStdIO->SetVBuf((f), (b), (t), (s), ErrorNo())
  184. #define PerlIO_set_cnt(f,c)    PL_piStdIO->SetCnt((f), (c), ErrorNo())
  185. #define PerlIO_set_ptrcnt(f,p,c)                    \
  186.     PL_piStdIO->SetPtrCnt((f), (p), (c), ErrorNo())
  187. #define PerlIO_setlinebuf(f)    PL_piStdIO->Setlinebuf((f), ErrorNo())
  188. #define PerlIO_printf        fprintf
  189. #define PerlIO_stdoutf        PL_piStdIO->Printf
  190. #define PerlIO_vprintf(f,fmt,a)    PL_piStdIO->Vprintf((f), ErrorNo(), (fmt),a)          
  191. #define PerlIO_tell(f)        PL_piStdIO->Tell((f), ErrorNo())
  192. #define PerlIO_seek(f,o,w)    PL_piStdIO->Seek((f),(o),(w), ErrorNo())
  193. #define PerlIO_getpos(f,p)    PL_piStdIO->Getpos((f),(p), ErrorNo())
  194. #define PerlIO_setpos(f,p)    PL_piStdIO->Setpos((f),(p), ErrorNo())
  195. #define PerlIO_rewind(f)    PL_piStdIO->Rewind((f), ErrorNo())
  196. #define PerlIO_tmpfile()    PL_piStdIO->Tmpfile(ErrorNo())
  197. #define PerlIO_init()        PL_piStdIO->Init(ErrorNo())
  198. #undef     init_os_extras
  199. #define init_os_extras()    PL_piStdIO->InitOSExtras(this)
  200.  
  201. #else    /* PERL_OBJECT */
  202.  
  203. #include "perlsdio.h"
  204.  
  205. #endif    /* PERL_OBJECT */
  206.  
  207. #ifndef PERLIO_IS_STDIO
  208. #ifdef USE_SFIO
  209. #include "perlsfio.h"
  210. #endif /* USE_SFIO */
  211. #endif /* PERLIO_IS_STDIO */
  212.  
  213. #ifndef EOF
  214. #define EOF (-1)
  215. #endif
  216.  
  217. /* This is to catch case with no stdio */
  218. #ifndef BUFSIZ
  219. #define BUFSIZ 1024
  220. #endif
  221.  
  222. #ifndef SEEK_SET
  223. #define SEEK_SET 0
  224. #endif
  225.  
  226. #ifndef SEEK_CUR
  227. #define SEEK_CUR 1
  228. #endif
  229.  
  230. #ifndef SEEK_END
  231. #define SEEK_END 2
  232. #endif
  233.  
  234. #ifndef PerlIO
  235. struct _PerlIO;
  236. #define PerlIO struct _PerlIO
  237. #endif /* No PerlIO */
  238.  
  239. #ifndef Fpos_t
  240. #define Fpos_t long
  241. #endif
  242.  
  243. #ifndef NEXT30_NO_ATTRIBUTE
  244. #ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
  245. #ifdef  __attribute__      /* Avoid possible redefinition errors */
  246. #undef  __attribute__
  247. #endif
  248. #define __attribute__(attr)
  249. #endif
  250. #endif
  251.  
  252. #ifndef PerlIO_stdoutf
  253. extern int    PerlIO_stdoutf        _((const char *,...))
  254.                     __attribute__((format (printf, 1, 2)));
  255. #endif
  256. #ifndef PerlIO_puts
  257. extern int    PerlIO_puts        _((PerlIO *,const char *));
  258. #endif
  259. #ifndef PerlIO_open
  260. extern PerlIO *    PerlIO_open        _((const char *,const char *));
  261. #endif
  262. #ifndef PerlIO_close
  263. extern int    PerlIO_close        _((PerlIO *));
  264. #endif
  265. #ifndef PerlIO_eof
  266. extern int    PerlIO_eof        _((PerlIO *));
  267. #endif
  268. #ifndef PerlIO_error
  269. extern int    PerlIO_error        _((PerlIO *));
  270. #endif
  271. #ifndef PerlIO_clearerr
  272. extern void    PerlIO_clearerr        _((PerlIO *));
  273. #endif
  274. #ifndef PerlIO_getc
  275. extern int    PerlIO_getc        _((PerlIO *));
  276. #endif
  277. #ifndef PerlIO_putc
  278. extern int    PerlIO_putc        _((PerlIO *,int));
  279. #endif
  280. #ifndef PerlIO_flush
  281. extern int    PerlIO_flush        _((PerlIO *));
  282. #endif
  283. #ifndef PerlIO_ungetc
  284. extern int    PerlIO_ungetc        _((PerlIO *,int));
  285. #endif
  286. #ifndef PerlIO_fileno
  287. extern int    PerlIO_fileno        _((PerlIO *));
  288. #endif
  289. #ifndef PerlIO_fdopen
  290. extern PerlIO *    PerlIO_fdopen        _((int, const char *));
  291. #endif
  292. #ifndef PerlIO_importFILE
  293. extern PerlIO *    PerlIO_importFILE    _((FILE *,int));
  294. #endif
  295. #ifndef PerlIO_exportFILE
  296. extern FILE *    PerlIO_exportFILE    _((PerlIO *,int));
  297. #endif
  298. #ifndef PerlIO_findFILE
  299. extern FILE *    PerlIO_findFILE        _((PerlIO *));
  300. #endif
  301. #ifndef PerlIO_releaseFILE
  302. extern void    PerlIO_releaseFILE    _((PerlIO *,FILE *));
  303. #endif
  304. #ifndef PerlIO_read
  305. extern SSize_t    PerlIO_read        _((PerlIO *,void *,Size_t));
  306. #endif
  307. #ifndef PerlIO_write
  308. extern SSize_t    PerlIO_write        _((PerlIO *,const void *,Size_t));
  309. #endif
  310. #ifndef PerlIO_setlinebuf
  311. extern void    PerlIO_setlinebuf    _((PerlIO *));
  312. #endif
  313. #ifndef PerlIO_printf
  314. extern int    PerlIO_printf        _((PerlIO *, const char *,...))
  315.                     __attribute__((format (printf, 2, 3)));
  316. #endif
  317. #ifndef PerlIO_sprintf
  318. extern int    PerlIO_sprintf        _((char *, int, const char *,...))
  319.                     __attribute__((format (printf, 3, 4)));
  320. #endif
  321. #ifndef PerlIO_vprintf
  322. extern int    PerlIO_vprintf        _((PerlIO *, const char *, va_list));
  323. #endif
  324. #ifndef PerlIO_tell
  325. extern long    PerlIO_tell        _((PerlIO *));
  326. #endif
  327. #ifndef PerlIO_seek
  328. extern int    PerlIO_seek        _((PerlIO *,off_t,int));
  329. #endif
  330. #ifndef PerlIO_rewind
  331. extern void    PerlIO_rewind        _((PerlIO *));
  332. #endif
  333. #ifndef PerlIO_has_base
  334. extern int    PerlIO_has_base        _((PerlIO *));
  335. #endif
  336. #ifndef PerlIO_has_cntptr
  337. extern int    PerlIO_has_cntptr    _((PerlIO *));
  338. #endif
  339. #ifndef PerlIO_fast_gets
  340. extern int    PerlIO_fast_gets    _((PerlIO *));
  341. #endif
  342. #ifndef PerlIO_canset_cnt
  343. extern int    PerlIO_canset_cnt    _((PerlIO *));
  344. #endif
  345. #ifndef PerlIO_get_ptr
  346. extern STDCHAR * PerlIO_get_ptr        _((PerlIO *));
  347. #endif
  348. #ifndef PerlIO_get_cnt
  349. extern int    PerlIO_get_cnt        _((PerlIO *));
  350. #endif
  351. #ifndef PerlIO_set_cnt
  352. extern void    PerlIO_set_cnt        _((PerlIO *,int));
  353. #endif
  354. #ifndef PerlIO_set_ptrcnt
  355. extern void    PerlIO_set_ptrcnt    _((PerlIO *,STDCHAR *,int));
  356. #endif
  357. #ifndef PerlIO_get_base
  358. extern STDCHAR * PerlIO_get_base    _((PerlIO *));
  359. #endif
  360. #ifndef PerlIO_get_bufsiz
  361. extern int    PerlIO_get_bufsiz    _((PerlIO *));
  362. #endif
  363. #ifndef PerlIO_tmpfile
  364. extern PerlIO *    PerlIO_tmpfile        _((void));
  365. #endif
  366. #ifndef PerlIO_stdin
  367. extern PerlIO *    PerlIO_stdin    _((void));
  368. #endif
  369. #ifndef PerlIO_stdout
  370. extern PerlIO *    PerlIO_stdout    _((void));
  371. #endif
  372. #ifndef PerlIO_stderr
  373. extern PerlIO *    PerlIO_stderr    _((void));
  374. #endif
  375. #ifndef PerlIO_getpos
  376. extern int    PerlIO_getpos        _((PerlIO *,Fpos_t *));
  377. #endif
  378. #ifndef PerlIO_setpos
  379. extern int    PerlIO_setpos        _((PerlIO *,const Fpos_t *));
  380. #endif
  381.  
  382.  
  383. /*
  384.  *   Interface for directory functions
  385.  */
  386.  
  387. #ifdef PERL_OBJECT
  388.  
  389. class IPerlDir
  390. {
  391. public:
  392.     virtual int        Makedir(const char *dirname, int mode, int &err) = 0;
  393.     virtual int        Chdir(const char *dirname, int &err) = 0;
  394.     virtual int        Rmdir(const char *dirname, int &err) = 0;
  395.     virtual int        Close(DIR *dirp, int &err) = 0;
  396.     virtual DIR *    Open(char *filename, int &err) = 0;
  397.     virtual struct direct *Read(DIR *dirp, int &err) = 0;
  398.     virtual void    Rewind(DIR *dirp, int &err) = 0;
  399.     virtual void    Seek(DIR *dirp, long loc, int &err) = 0;
  400.     virtual long    Tell(DIR *dirp, int &err) = 0;
  401. };
  402.  
  403. #define PerlDir_mkdir(name, mode)                \
  404.     PL_piDir->Makedir((name), (mode), ErrorNo())
  405. #define PerlDir_chdir(name)                    \
  406.     PL_piDir->Chdir((name), ErrorNo())
  407. #define PerlDir_rmdir(name)                    \
  408.     PL_piDir->Rmdir((name), ErrorNo())
  409. #define PerlDir_close(dir)                    \
  410.     PL_piDir->Close((dir), ErrorNo())
  411. #define PerlDir_open(name)                    \
  412.     PL_piDir->Open((name), ErrorNo())
  413. #define PerlDir_read(dir)                    \
  414.     PL_piDir->Read((dir), ErrorNo())
  415. #define PerlDir_rewind(dir)                    \
  416.     PL_piDir->Rewind((dir), ErrorNo())
  417. #define PerlDir_seek(dir, loc)                    \
  418.     PL_piDir->Seek((dir), (loc), ErrorNo())
  419. #define PerlDir_tell(dir)                    \
  420.     PL_piDir->Tell((dir), ErrorNo())
  421.  
  422. #else    /* PERL_OBJECT */
  423.  
  424. #define PerlDir_mkdir(name, mode)    Mkdir((name), (mode))
  425. #ifdef VMS
  426. #  define PerlDir_chdir(n)        chdir(((n) && *(n)) ? (n) : "SYS$LOGIN")
  427. #else 
  428. #  define PerlDir_chdir(name)        chdir((name))
  429. #endif
  430. #define PerlDir_rmdir(name)        rmdir((name))
  431. #define PerlDir_close(dir)        closedir((dir))
  432. #define PerlDir_open(name)        opendir((name))
  433. #define PerlDir_read(dir)        readdir((dir))
  434. #define PerlDir_rewind(dir)        rewinddir((dir))
  435. #define PerlDir_seek(dir, loc)        seekdir((dir), (loc))
  436. #define PerlDir_tell(dir)        telldir((dir))
  437.  
  438. #endif    /* PERL_OBJECT */
  439.  
  440. /*
  441.     Interface for perl environment functions
  442. */
  443.  
  444. #ifdef PERL_OBJECT
  445.  
  446. class IPerlEnv
  447. {
  448. public:
  449.     virtual char *    Getenv(const char *varname, int &err) = 0;
  450.     virtual int        Putenv(const char *envstring, int &err) = 0;
  451.     virtual char *    LibPath(char *patchlevel) =0;
  452.     virtual char *    SiteLibPath(char *patchlevel) =0;
  453. };
  454.  
  455. #define PerlEnv_putenv(str)        PL_piENV->Putenv((str), ErrorNo())
  456. #define PerlEnv_getenv(str)        PL_piENV->Getenv((str), ErrorNo())
  457. #ifdef WIN32
  458. #define PerlEnv_lib_path(str)        PL_piENV->LibPath((str))
  459. #define PerlEnv_sitelib_path(str)    PL_piENV->SiteLibPath((str))
  460. #endif
  461.  
  462. #else    /* PERL_OBJECT */
  463.  
  464. #define PerlEnv_putenv(str)        putenv((str))
  465. #define PerlEnv_getenv(str)        getenv((str))
  466.  
  467. #endif    /* PERL_OBJECT */
  468.  
  469. /*
  470.     Interface for perl low-level IO functions
  471. */
  472.  
  473. #ifdef PERL_OBJECT
  474.  
  475. class IPerlLIO
  476. {
  477. public:
  478.     virtual int        Access(const char *path, int mode, int &err) = 0;
  479.     virtual int        Chmod(const char *filename, int pmode, int &err) = 0;
  480.     virtual int        Chown(const char *filename, uid_t owner,
  481.                   gid_t group, int &err) = 0;
  482.     virtual int        Chsize(int handle, long size, int &err) = 0;
  483.     virtual int        Close(int handle, int &err) = 0;
  484.     virtual int        Dup(int handle, int &err) = 0;
  485.     virtual int        Dup2(int handle1, int handle2, int &err) = 0;
  486.     virtual int        Flock(int fd, int oper, int &err) = 0;
  487.     virtual int        FileStat(int handle, struct stat *buffer, int &err) = 0;
  488.     virtual int        IOCtl(int i, unsigned int u, char *data, int &err) = 0;
  489.     virtual int        Isatty(int handle, int &err) = 0;
  490.     virtual long    Lseek(int handle, long offset, int origin, int &err) = 0;
  491.     virtual int        Lstat(const char *path, struct stat *buffer, int &err) = 0;
  492.     virtual char *    Mktemp(char *Template, int &err) = 0;
  493.     virtual int        Open(const char *filename, int oflag, int &err) = 0;    
  494.     virtual int        Open(const char *filename, int oflag,
  495.                  int pmode, int &err) = 0;    
  496.     virtual int        Read(int handle, void *buffer,
  497.                  unsigned int count, int &err) = 0;
  498.     virtual int        Rename(const char *oname,
  499.                    const char *newname, int &err) = 0;
  500.     virtual int        Setmode(int handle, int mode, int &err) = 0;
  501.     virtual int        NameStat(const char *path,
  502.                  struct stat *buffer, int &err) = 0;
  503.     virtual char *    Tmpnam(char *string, int &err) = 0;
  504.     virtual int        Umask(int pmode, int &err) = 0;
  505.     virtual int        Unlink(const char *filename, int &err) = 0;
  506.     virtual int        Utime(char *filename, struct utimbuf *times, int &err) = 0;
  507.     virtual int        Write(int handle, const void *buffer,
  508.                   unsigned int count, int &err) = 0;
  509. };
  510.  
  511. #define PerlLIO_access(file, mode)                    \
  512.     PL_piLIO->Access((file), (mode), ErrorNo())
  513. #define PerlLIO_chmod(file, mode)                    \
  514.     PL_piLIO->Chmod((file), (mode), ErrorNo())
  515. #define PerlLIO_chown(file, owner, group)                \
  516.     PL_piLIO->Chown((file), (owner), (group), ErrorNo())
  517. #define PerlLIO_chsize(fd, size)                    \
  518.     PL_piLIO->Chsize((fd), (size), ErrorNo())
  519. #define PerlLIO_close(fd)                        \
  520.     PL_piLIO->Close((fd), ErrorNo())
  521. #define PerlLIO_dup(fd)                            \
  522.     PL_piLIO->Dup((fd), ErrorNo())
  523. #define PerlLIO_dup2(fd1, fd2)                        \
  524.     PL_piLIO->Dup2((fd1), (fd2), ErrorNo())
  525. #define PerlLIO_flock(fd, op)                        \
  526.     PL_piLIO->Flock((fd), (op), ErrorNo())
  527. #define PerlLIO_fstat(fd, buf)                        \
  528.     PL_piLIO->FileStat((fd), (buf), ErrorNo())
  529. #define PerlLIO_ioctl(fd, u, buf)                    \
  530.     PL_piLIO->IOCtl((fd), (u), (buf), ErrorNo())
  531. #define PerlLIO_isatty(fd)                        \
  532.     PL_piLIO->Isatty((fd), ErrorNo())
  533. #define PerlLIO_lseek(fd, offset, mode)                    \
  534.     PL_piLIO->Lseek((fd), (offset), (mode), ErrorNo())
  535. #define PerlLIO_lstat(name, buf)                    \
  536.     PL_piLIO->Lstat((name), (buf), ErrorNo())
  537. #define PerlLIO_mktemp(file)                        \
  538.     PL_piLIO->Mktemp((file), ErrorNo())
  539. #define PerlLIO_open(file, flag)                    \
  540.     PL_piLIO->Open((file), (flag), ErrorNo())
  541. #define PerlLIO_open3(file, flag, perm)                    \
  542.     PL_piLIO->Open((file), (flag), (perm), ErrorNo())
  543. #define PerlLIO_read(fd, buf, count)                    \
  544.     PL_piLIO->Read((fd), (buf), (count), ErrorNo())
  545. #define PerlLIO_rename(oname, newname)                    \
  546.     PL_piLIO->Rename((oname), (newname), ErrorNo())
  547. #define PerlLIO_setmode(fd, mode)                    \
  548.     PL_piLIO->Setmode((fd), (mode), ErrorNo())
  549. #define PerlLIO_stat(name, buf)                        \
  550.     PL_piLIO->NameStat((name), (buf), ErrorNo())
  551. #define PerlLIO_tmpnam(str)                        \
  552.     PL_piLIO->Tmpnam((str), ErrorNo())
  553. #define PerlLIO_umask(mode)                        \
  554.     PL_piLIO->Umask((mode), ErrorNo())
  555. #define PerlLIO_unlink(file)                        \
  556.     PL_piLIO->Unlink((file), ErrorNo())
  557. #define PerlLIO_utime(file, time)                    \
  558.     PL_piLIO->Utime((file), (time), ErrorNo())
  559. #define PerlLIO_write(fd, buf, count)                    \
  560.     PL_piLIO->Write((fd), (buf), (count), ErrorNo())
  561.  
  562. #else    /* PERL_OBJECT */
  563.  
  564. #define PerlLIO_access(file, mode)    access((file), (mode))
  565. #define PerlLIO_chmod(file, mode)    chmod((file), (mode))
  566. #define PerlLIO_chown(file, owner, grp)    chown((file), (owner), (grp))
  567. #define PerlLIO_chsize(fd, size)    chsize((fd), (size))
  568. #define PerlLIO_close(fd)        close((fd))
  569. #define PerlLIO_dup(fd)            dup((fd))
  570. #define PerlLIO_dup2(fd1, fd2)        dup2((fd1), (fd2))
  571. #define PerlLIO_flock(fd, op)        FLOCK((fd), (op))
  572. #define PerlLIO_fstat(fd, buf)        Fstat((fd), (buf))
  573. #define PerlLIO_ioctl(fd, u, buf)    ioctl((fd), (u), (buf))
  574. #define PerlLIO_isatty(fd)        isatty((fd))
  575. #define PerlLIO_lseek(fd, offset, mode)    lseek((fd), (offset), (mode))
  576. #define PerlLIO_lstat(name, buf)    lstat((name), (buf))
  577. #define PerlLIO_mktemp(file)        mktemp((file))
  578. #define PerlLIO_mkstemp(file)        mkstemp((file))
  579. #define PerlLIO_open(file, flag)    open((file), (flag))
  580. #define PerlLIO_open3(file, flag, perm)    open((file), (flag), (perm))
  581. #define PerlLIO_read(fd, buf, count)    read((fd), (buf), (count))
  582. #define PerlLIO_rename(old, new)    rename((old), (new))
  583. #define PerlLIO_setmode(fd, mode)    setmode((fd), (mode))
  584. #define PerlLIO_stat(name, buf)        Stat((name), (buf))
  585. #define PerlLIO_tmpnam(str)        tmpnam((str))
  586. #define PerlLIO_umask(mode)        umask((mode))
  587. #define PerlLIO_unlink(file)        unlink((file))
  588. #define PerlLIO_utime(file, time)    utime((file), (time))
  589. #define PerlLIO_write(fd, buf, count)    write((fd), (buf), (count))
  590.  
  591. #endif    /* PERL_OBJECT */
  592.  
  593. /*
  594.     Interface for perl memory allocation
  595. */
  596.  
  597. #ifdef PERL_OBJECT
  598.  
  599. class IPerlMem
  600. {
  601. public:
  602.     virtual void *    Malloc(size_t) = 0;
  603.     virtual void *    Realloc(void*, size_t) = 0;
  604.     virtual void    Free(void*) = 0;
  605. };
  606.  
  607. #define PerlMem_malloc(size)        PL_piMem->Malloc((size))
  608. #define PerlMem_realloc(buf, size)    PL_piMem->Realloc((buf), (size))
  609. #define PerlMem_free(buf)        PL_piMem->Free((buf))
  610.  
  611. #else    /* PERL_OBJECT */
  612.  
  613. #define PerlMem_malloc(size)        malloc((size))
  614. #define PerlMem_realloc(buf, size)    realloc((buf), (size))
  615. #define PerlMem_free(buf)        free((buf))
  616.  
  617. #endif    /* PERL_OBJECT */
  618.  
  619. /*
  620.     Interface for perl process functions
  621. */
  622.  
  623.  
  624. #ifdef PERL_OBJECT
  625.  
  626. #ifndef Sighandler_t
  627. typedef Signal_t (*Sighandler_t) _((int));
  628. #endif
  629. #ifndef jmp_buf
  630. #include <setjmp.h>
  631. #endif
  632.  
  633. class IPerlProc
  634. {
  635. public:
  636.     virtual void    Abort(void) = 0;
  637.     virtual char *    Crypt(const char* clear, const char* salt) = 0;
  638.     virtual void    Exit(int status) = 0;
  639.     virtual void    _Exit(int status) = 0;
  640.     virtual int        Execl(const char *cmdname, const char *arg0,
  641.                   const char *arg1, const char *arg2,
  642.                   const char *arg3) = 0;
  643.     virtual int        Execv(const char *cmdname, const char *const *argv) = 0;
  644.     virtual int        Execvp(const char *cmdname, const char *const *argv) = 0;
  645.     virtual uid_t    Getuid(void) = 0;
  646.     virtual uid_t    Geteuid(void) = 0;
  647.     virtual gid_t    Getgid(void) = 0;
  648.     virtual gid_t    Getegid(void) = 0;
  649.     virtual char *    Getlogin(void) = 0;
  650.     virtual int        Kill(int pid, int sig) = 0;
  651.     virtual int        Killpg(int pid, int sig) = 0;
  652.     virtual int        PauseProc(void) = 0;
  653.     virtual PerlIO *    Popen(const char *command, const char *mode) = 0;
  654.     virtual int        Pclose(PerlIO *stream) = 0;
  655.     virtual int        Pipe(int *phandles) = 0;
  656.     virtual int        Setuid(uid_t uid) = 0;
  657.     virtual int        Setgid(gid_t gid) = 0;
  658.     virtual int        Sleep(unsigned int) = 0;
  659.     virtual int        Times(struct tms *timebuf) = 0;
  660.     virtual int        Wait(int *status) = 0;
  661.     virtual int        Waitpid(int pid, int *status, int flags) = 0;
  662.     virtual Sighandler_t    Signal(int sig, Sighandler_t subcode) = 0;
  663. #ifdef WIN32
  664.     virtual void    GetSysMsg(char*& msg, DWORD& dwLen, DWORD dwErr) = 0;
  665.     virtual void    FreeBuf(char* msg) = 0;
  666.     virtual BOOL    DoCmd(char *cmd) = 0;
  667.     virtual int        Spawn(char*cmds) = 0;
  668.     virtual int        Spawnvp(int mode, const char *cmdname,
  669.                 const char *const *argv) = 0;
  670.     virtual int        ASpawn(void *vreally, void **vmark, void **vsp) = 0;
  671. #endif
  672. };
  673.  
  674. #define PerlProc_abort()    PL_piProc->Abort()
  675. #define PerlProc_crypt(c,s)    PL_piProc->Crypt((c), (s))
  676. #define PerlProc_exit(s)    PL_piProc->Exit((s))
  677. #define PerlProc__exit(s)    PL_piProc->_Exit((s))
  678. #define PerlProc_execl(c, w, x, y, z)                    \
  679.     PL_piProc->Execl((c), (w), (x), (y), (z))
  680.  
  681. #define PerlProc_execv(c, a)    PL_piProc->Execv((c), (a))
  682. #define PerlProc_execvp(c, a)    PL_piProc->Execvp((c), (a))
  683. #define PerlProc_getuid()    PL_piProc->Getuid()
  684. #define PerlProc_geteuid()    PL_piProc->Geteuid()
  685. #define PerlProc_getgid()    PL_piProc->Getgid()
  686. #define PerlProc_getegid()    PL_piProc->Getegid()
  687. #define PerlProc_getlogin()    PL_piProc->Getlogin()
  688. #define PerlProc_kill(i, a)    PL_piProc->Kill((i), (a))
  689. #define PerlProc_killpg(i, a)    PL_piProc->Killpg((i), (a))
  690. #define PerlProc_pause()    PL_piProc->PauseProc()
  691. #define PerlProc_popen(c, m)    PL_piProc->Popen((c), (m))
  692. #define PerlProc_pclose(f)    PL_piProc->Pclose((f))
  693. #define PerlProc_pipe(fd)    PL_piProc->Pipe((fd))
  694. #define PerlProc_setuid(u)    PL_piProc->Setuid((u))
  695. #define PerlProc_setgid(g)    PL_piProc->Setgid((g))
  696. #define PerlProc_sleep(t)    PL_piProc->Sleep((t))
  697. #define PerlProc_times(t)    PL_piProc->Times((t))
  698. #define PerlProc_wait(t)    PL_piProc->Wait((t))
  699. #define PerlProc_waitpid(p,s,f)    PL_piProc->Waitpid((p), (s), (f))
  700. #define PerlProc_setjmp(b, n)    Sigsetjmp((b), (n))
  701. #define PerlProc_longjmp(b, n)    Siglongjmp((b), (n))
  702. #define PerlProc_signal(n, h)    PL_piProc->Signal((n), (h))
  703.  
  704. #ifdef WIN32
  705. #define PerlProc_GetSysMsg(s,l,e)                    \
  706.     PL_piProc->GetSysMsg((s), (l), (e))
  707.  
  708. #define PerlProc_FreeBuf(s)    PL_piProc->FreeBuf((s))
  709. #define PerlProc_Cmd(s)        PL_piProc->DoCmd((s))
  710. #define do_spawn(s)        PL_piProc->Spawn((s))
  711. #define do_spawnvp(m, c, a)    PL_piProc->Spawnvp((m), (c), (a))
  712. #define PerlProc_aspawn(m,c,a)    PL_piProc->ASpawn((m), (c), (a))
  713. #endif
  714.  
  715. #else    /* PERL_OBJECT */
  716.  
  717. #define PerlProc_abort()    abort()
  718. #define PerlProc_crypt(c,s)    crypt((c), (s))
  719. #define PerlProc_exit(s)    exit((s))
  720. #define PerlProc__exit(s)    _exit((s))
  721. #define PerlProc_execl(c,w,x,y,z)                    \
  722.     execl((c), (w), (x), (y), (z))
  723. #define PerlProc_execv(c, a)    execv((c), (a))
  724. #define PerlProc_execvp(c, a)    execvp((c), (a))
  725. #define PerlProc_getuid()    getuid()
  726. #define PerlProc_geteuid()    geteuid()
  727. #define PerlProc_getgid()    getgid()
  728. #define PerlProc_getegid()    getegid()
  729. #define PerlProc_getlogin()    getlogin()
  730. #define PerlProc_kill(i, a)    kill((i), (a))
  731. #define PerlProc_killpg(i, a)    killpg((i), (a))
  732. #define PerlProc_pause()    Pause()
  733. #define PerlProc_popen(c, m)    my_popen((c), (m))
  734. #define PerlProc_pclose(f)    my_pclose((f))
  735. #define PerlProc_pipe(fd)    pipe((fd))
  736. #define PerlProc_setuid(u)    setuid((u))
  737. #define PerlProc_setgid(g)    setgid((g))
  738. #define PerlProc_sleep(t)    sleep((t))
  739. #define PerlProc_times(t)    times((t))
  740. #define PerlProc_wait(t)    wait((t))
  741. #define PerlProc_waitpid(p,s,f)    waitpid((p), (s), (f))
  742. #define PerlProc_setjmp(b, n)    Sigsetjmp((b), (n))
  743. #define PerlProc_longjmp(b, n)    Siglongjmp((b), (n))
  744. #define PerlProc_signal(n, h)    signal((n), (h))
  745.  
  746.  
  747. #endif    /* PERL_OBJECT */
  748.  
  749. /*
  750.     Interface for perl socket functions
  751. */
  752.  
  753. #ifdef PERL_OBJECT
  754.  
  755. class IPerlSock
  756. {
  757. public:
  758.     virtual u_long    Htonl(u_long hostlong) = 0;
  759.     virtual u_short    Htons(u_short hostshort) = 0;
  760.     virtual u_long    Ntohl(u_long netlong) = 0;
  761.     virtual u_short    Ntohs(u_short netshort) = 0;
  762.     virtual SOCKET    Accept(SOCKET s, struct sockaddr* addr,
  763.                    int* addrlen, int &err) = 0;
  764.     virtual int        Bind(SOCKET s, const struct sockaddr* name,
  765.                  int namelen, int &err) = 0;
  766.     virtual int        Connect(SOCKET s, const struct sockaddr* name,
  767.                 int namelen, int &err) = 0;
  768.     virtual void    Endhostent(int &err) = 0;
  769.     virtual void    Endnetent(int &err) = 0;
  770.     virtual void    Endprotoent(int &err) = 0;
  771.     virtual void    Endservent(int &err) = 0;
  772.     virtual int        Gethostname(char* name, int namelen, int &err) = 0;
  773.     virtual int        Getpeername(SOCKET s, struct sockaddr* name,
  774.                     int* namelen, int &err) = 0;
  775.     virtual struct hostent *    Gethostbyaddr(const char* addr, int len,
  776.                           int type, int &err) = 0;
  777.     virtual struct hostent *    Gethostbyname(const char* name, int &err) = 0;
  778.     virtual struct hostent *    Gethostent(int &err) = 0;
  779.     virtual struct netent *    Getnetbyaddr(long net, int type, int &err) = 0;
  780.     virtual struct netent *    Getnetbyname(const char *, int &err) = 0;
  781.     virtual struct netent *    Getnetent(int &err) = 0;
  782.     virtual struct protoent *    Getprotobyname(const char* name, int &err) = 0;
  783.     virtual struct protoent *    Getprotobynumber(int number, int &err) = 0;
  784.     virtual struct protoent *    Getprotoent(int &err) = 0;
  785.     virtual struct servent *    Getservbyname(const char* name,
  786.                           const char* proto, int &err) = 0;
  787.     virtual struct servent *    Getservbyport(int port, const char* proto,
  788.                           int &err) = 0;
  789.     virtual struct servent *    Getservent(int &err) = 0;
  790.     virtual int        Getsockname(SOCKET s, struct sockaddr* name,
  791.                     int* namelen, int &err) = 0;
  792.     virtual int        Getsockopt(SOCKET s, int level, int optname,
  793.                    char* optval, int* optlen, int &err) = 0;
  794.     virtual unsigned long    InetAddr(const char* cp, int &err) = 0;
  795.     virtual char *    InetNtoa(struct in_addr in, int &err) = 0;
  796.     virtual int        Listen(SOCKET s, int backlog, int &err) = 0;
  797.     virtual int        Recv(SOCKET s, char* buf, int len,
  798.                  int flags, int &err) = 0;
  799.     virtual int        Recvfrom(SOCKET s, char* buf, int len, int flags,
  800.                  struct sockaddr* from, int* fromlen, int &err) = 0;
  801.     virtual int        Select(int nfds, char* readfds, char* writefds,
  802.                    char* exceptfds, const struct timeval* timeout,
  803.                    int &err) = 0;
  804.     virtual int        Send(SOCKET s, const char* buf, int len,
  805.                  int flags, int &err) = 0; 
  806.     virtual int        Sendto(SOCKET s, const char* buf, int len, int flags,
  807.                    const struct sockaddr* to, int tolen, int &err) = 0;
  808.     virtual void    Sethostent(int stayopen, int &err) = 0;
  809.     virtual void    Setnetent(int stayopen, int &err) = 0;
  810.     virtual void    Setprotoent(int stayopen, int &err) = 0;
  811.     virtual void    Setservent(int stayopen, int &err) = 0;
  812.     virtual int        Setsockopt(SOCKET s, int level, int optname,
  813.                    const char* optval, int optlen, int &err) = 0;
  814.     virtual int        Shutdown(SOCKET s, int how, int &err) = 0;
  815.     virtual SOCKET    Socket(int af, int type, int protocol, int &err) = 0;
  816.     virtual int        Socketpair(int domain, int type, int protocol,
  817.                    int* fds, int &err) = 0;
  818. #ifdef WIN32
  819.     virtual int        Closesocket(SOCKET s, int& err) = 0;
  820.     virtual int        Ioctlsocket(SOCKET s, long cmd, u_long *argp,
  821.                     int& err) = 0;
  822. #endif
  823. };
  824.  
  825. #define PerlSock_htonl(x)        PL_piSock->Htonl(x)
  826. #define PerlSock_htons(x)        PL_piSock->Htons(x)
  827. #define PerlSock_ntohl(x)        PL_piSock->Ntohl(x)
  828. #define PerlSock_ntohs(x)        PL_piSock->Ntohs(x)
  829. #define PerlSock_accept(s, a, l)    PL_piSock->Accept(s, a, l, ErrorNo())
  830. #define PerlSock_bind(s, n, l)        PL_piSock->Bind(s, n, l, ErrorNo())
  831. #define PerlSock_connect(s, n, l)    PL_piSock->Connect(s, n, l, ErrorNo())
  832. #define PerlSock_endhostent()        PL_piSock->Endhostent(ErrorNo())
  833. #define PerlSock_endnetent()        PL_piSock->Endnetent(ErrorNo())
  834. #define PerlSock_endprotoent()        PL_piSock->Endprotoent(ErrorNo())
  835. #define PerlSock_endservent()        PL_piSock->Endservent(ErrorNo())
  836. #define PerlSock_gethostbyaddr(a, l, t)    PL_piSock->Gethostbyaddr(a, l, t, ErrorNo())
  837. #define PerlSock_gethostbyname(n)    PL_piSock->Gethostbyname(n, ErrorNo())
  838. #define PerlSock_gethostent()        PL_piSock->Gethostent(ErrorNo())
  839. #define PerlSock_gethostname(n, l)    PL_piSock->Gethostname(n, l, ErrorNo())
  840. #define PerlSock_getnetbyaddr(n, t)    PL_piSock->Getnetbyaddr(n, t, ErrorNo())
  841. #define PerlSock_getnetbyname(c)    PL_piSock->Getnetbyname(c, ErrorNo())
  842. #define PerlSock_getnetent()        PL_piSock->Getnetent(ErrorNo())
  843. #define PerlSock_getpeername(s, n, l)    PL_piSock->Getpeername(s, n, l, ErrorNo())
  844. #define PerlSock_getprotobyname(n)    PL_piSock->Getprotobyname(n, ErrorNo())
  845. #define PerlSock_getprotobynumber(n)    PL_piSock->Getprotobynumber(n, ErrorNo())
  846. #define PerlSock_getprotoent()        PL_piSock->Getprotoent(ErrorNo())
  847. #define PerlSock_getservbyname(n, p)    PL_piSock->Getservbyname(n, p, ErrorNo())
  848. #define PerlSock_getservbyport(port, p)    PL_piSock->Getservbyport(port, p, ErrorNo())
  849. #define PerlSock_getservent()        PL_piSock->Getservent(ErrorNo())
  850. #define PerlSock_getsockname(s, n, l)    PL_piSock->Getsockname(s, n, l, ErrorNo())
  851. #define PerlSock_getsockopt(s,l,n,v,i)    PL_piSock->Getsockopt(s, l, n, v, i, ErrorNo())
  852. #define PerlSock_inet_addr(c)        PL_piSock->InetAddr(c, ErrorNo())
  853. #define PerlSock_inet_ntoa(i)        PL_piSock->InetNtoa(i, ErrorNo())
  854. #define PerlSock_listen(s, b)        PL_piSock->Listen(s, b, ErrorNo())
  855. #define PerlSock_recv(s, b, l, f)    PL_piSock->Recv(s, b, l, f, ErrorNo())
  856. #define PerlSock_recvfrom(s,b,l,f,from,fromlen)                \
  857.     PL_piSock->Recvfrom(s, b, l, f, from, fromlen, ErrorNo())
  858. #define PerlSock_select(n, r, w, e, t)                    \
  859.     PL_piSock->Select(n, (char*)r, (char*)w, (char*)e, t, ErrorNo())
  860. #define PerlSock_send(s, b, l, f)    PL_piSock->Send(s, b, l, f, ErrorNo())
  861. #define PerlSock_sendto(s, b, l, f, t, tlen)                \
  862.     PL_piSock->Sendto(s, b, l, f, t, tlen, ErrorNo())
  863. #define PerlSock_sethostent(f)        PL_piSock->Sethostent(f, ErrorNo())
  864. #define PerlSock_setnetent(f)        PL_piSock->Setnetent(f, ErrorNo())
  865. #define PerlSock_setprotoent(f)        PL_piSock->Setprotoent(f, ErrorNo())
  866. #define PerlSock_setservent(f)        PL_piSock->Setservent(f, ErrorNo())
  867. #define PerlSock_setsockopt(s, l, n, v, len)                \
  868.     PL_piSock->Setsockopt(s, l, n, v, len, ErrorNo())
  869. #define PerlSock_shutdown(s, h)        PL_piSock->Shutdown(s, h, ErrorNo())
  870. #define PerlSock_socket(a, t, p)    PL_piSock->Socket(a, t, p, ErrorNo())
  871. #define PerlSock_socketpair(a, t, p, f)    PL_piSock->Socketpair(a, t, p, f, ErrorNo())
  872.  
  873. #else    /* PERL_OBJECT */
  874.  
  875. #define PerlSock_htonl(x)        htonl(x)
  876. #define PerlSock_htons(x)        htons(x)
  877. #define PerlSock_ntohl(x)        ntohl(x)
  878. #define PerlSock_ntohs(x)        ntohs(x)
  879. #define PerlSock_accept(s, a, l)    accept(s, a, l)
  880. #define PerlSock_bind(s, n, l)        bind(s, n, l)
  881. #define PerlSock_connect(s, n, l)    connect(s, n, l)
  882.  
  883. #define PerlSock_gethostbyaddr(a, l, t)    gethostbyaddr(a, l, t)
  884. #define PerlSock_gethostbyname(n)    gethostbyname(n)
  885. #define PerlSock_gethostent        gethostent
  886. #define PerlSock_endhostent        endhostent
  887. #define PerlSock_gethostname(n, l)    gethostname(n, l)
  888.  
  889. #define PerlSock_getnetbyaddr(n, t)    getnetbyaddr(n, t)
  890. #define PerlSock_getnetbyname(n)    getnetbyname(n)
  891. #define PerlSock_getnetent        getnetent
  892. #define PerlSock_endnetent        endnetent
  893. #define PerlSock_getpeername(s, n, l)    getpeername(s, n, l)
  894.  
  895. #define PerlSock_getprotobyname(n)    getprotobyname(n)
  896. #define PerlSock_getprotobynumber(n)    getprotobynumber(n)
  897. #define PerlSock_getprotoent        getprotoent
  898. #define PerlSock_endprotoent        endprotoent
  899.  
  900. #define PerlSock_getservbyname(n, p)    getservbyname(n, p)
  901. #define PerlSock_getservbyport(port, p)    getservbyport(port, p)
  902. #define PerlSock_getservent        getservent
  903. #define PerlSock_endservent        endservent
  904.  
  905. #define PerlSock_getsockname(s, n, l)    getsockname(s, n, l)
  906. #define PerlSock_getsockopt(s,l,n,v,i)    getsockopt(s, l, n, v, i)
  907. #define PerlSock_inet_addr(c)        inet_addr(c)
  908. #define PerlSock_inet_ntoa(i)        inet_ntoa(i)
  909. #define PerlSock_listen(s, b)        listen(s, b)
  910. #define PerlSock_recvfrom(s, b, l, f, from, fromlen)            \
  911.     recvfrom(s, b, l, f, from, fromlen)
  912. #define PerlSock_select(n, r, w, e, t)    select(n, r, w, e, t)
  913. #define PerlSock_send(s, b, l, f)    send(s, b, l, f)
  914. #define PerlSock_sendto(s, b, l, f, t, tlen)                \
  915.     sendto(s, b, l, f, t, tlen)
  916. #define PerlSock_sethostent(f)        sethostent(f)
  917. #define PerlSock_setnetent(f)        setnetent(f)
  918. #define PerlSock_setprotoent(f)        setprotoent(f)
  919. #define PerlSock_setservent(f)        setservent(f)
  920. #define PerlSock_setsockopt(s, l, n, v, len)                \
  921.     setsockopt(s, l, n, v, len)
  922. #define PerlSock_shutdown(s, h)        shutdown(s, h)
  923. #define PerlSock_socket(a, t, p)    socket(a, t, p)
  924. #define PerlSock_socketpair(a, t, p, f)    socketpair(a, t, p, f)
  925.  
  926.  
  927. #endif    /* PERL_OBJECT */
  928.  
  929. #endif    /* __Inc__IPerl___ */
  930.  
  931.